package tour.board.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Repository;



import tour.board.to.Board;
import board.util.Utilities;

@Repository
public class BoardDAOImpl implements BoardDAO{
	
	@Autowired
	private SqlMapClientTemplate sqlMap;
	
	
	public void setSqlMap(SqlMapClientTemplate sqlMap) {
		this.sqlMap = sqlMap;
	}
	
	
//	board 테이블에 새 게시물 하나 insert
	@Override
	public Object insertContentForNewCount(Board board) throws SQLException{
		return sqlMap.insert("board.insertContentForNewCount", board);
							 
	}
//	board 테이블에 답변글 하나 insert 처리
	@Override
	public Object insertContentForReply(Board board) throws SQLException{
		return sqlMap.insert("board.insertContentForReply", board);
	}
	
//	매개변수로 받은 페이지에 보여줄 글 목록 조회
	@Override
	public ArrayList<Board> selectBoardListByPage(int page) throws SQLException{
		HashMap map = new HashMap();
		map.put("contentPerPage", Utilities.CONTENT_PER_PAGE);
		map.put("page", page);
		return (ArrayList<Board>)sqlMap.queryForList("board.selectBoardListByPage", map);
	}
//	전체 게시물 조회 - 페이징 처리 안할 경우 호출 될 메소드
	@Override
	public ArrayList<Board> selectBoardAllList() throws SQLException{
		return (ArrayList<Board>)sqlMap.queryForList("board.selectBoardAllList");
	}
	
//	총 게시물의 개수를 조회하는 메소드
	@Override
	public int selectTotalContent() throws SQLException{
		return (Integer)sqlMap.queryForObject("board.selectTotalContent");
	}
	
//	조회수를 1개 증가시키는 메소드 (글 조회시 호출)
	@Override
	public int updateViewCount(int no) throws SQLException{
		return sqlMap.update("board.updateViewCount", no);
	}

//	글번호로 하나의 게시물을 조회하는 메소드
	@Override
	public Board selectContentByNO(int no) throws SQLException{
		return (Board)sqlMap.queryForObject("board.selectContentByNO", no);
	}
//	게시물 정보를 수정하는 메소드
	@Override
	public int updateContent(Board board) throws SQLException{
		return sqlMap.update("board.updateContent", board);
	}
//	글번호로 게시물을 삭제하는 메소드
	@Override
	public int deleteContentByNO(int no) throws SQLException{
		return sqlMap.delete("board.deleteContentByNO", no);
	}
	
//	매개변수로 받은 refamily와 같은 refamily이고 매개변수로 받은 restep 보다 큰 restep을 가진 게시물들의 restep값을 1씩 증가 처리하는 메소드.
	@Override
	public int updateRestep(int refamily, int restep) throws SQLException{
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		map.put("refamily", refamily);
		map.put("restep", restep);
		return sqlMap.update("board.updateRestep", map);
	}


	@Override
	public ArrayList findTitle(String find) {
		return (ArrayList)sqlMap.queryForList("board.findTitle",find);
	}


	@Override
	public ArrayList mainList() {
		return (ArrayList)sqlMap.queryForList("board.mainList");
	}
	
}












